// mixins的中文意思是混入，就是在类中混入其他功能
// dart中可以使用mixins实现类似多继承的功能
// 1.作为mixins类不能继承其他类，只能继承mixins类本身的属性和方法
// 2.作为mixins的类不能有自身的构造函数，因为会导致继承不了
// 3.一个类可以mixins多个mixins类
// 4.mixins不是继承，也不是接口，而是一种全新的特性

class A{
  int a = 8;
  void printA(){
    print('printA');
  }
}

class B{
  int b = 18;
  void printB(){
    print('printB');
  }
}

class C with A,B{ //with关键词实现类似多继承
 void printC(){
   printA();
   printB();
   print('$a-$b'); //with继承之后，通过this或者直接通过变量名都可以访问继承的所有属性和方法
 }
}

class P{
  P(int num){
    print('这是P类,$num');
  }
  printP(){
    print('printP');
  }
}
// 如果一个类继承了父类，父类中的构造函数会被自动执行,子类也要定义构造函数，且子类的构造函数传参会传给父类
class G extends P with A,B{
  G(super.num);
 //既继承P类，又通过mixins继承了A类和B类
//  如果mixins继承的类有相同的方法，后面继承的会覆盖前面的
    printG(){
    printA();
    printB();
    printP();
  }
}

main(){
  var c = new C();
  c.printC();

  var g = new G(99);
  g.printG();

}